home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Shareware World / Info / For Developers / Mops 3.4.sea / Mops source / Toolbox classes / Region < prev    next >
Text File  |  1995-11-23  |  2KB  |  100 lines

  1. (*
  2. Class Region is Mops implementation of QuickDraw structure Region.
  3. Since Toolbox's region is a handle I've made it a subclass of Mops
  4. Handle.
  5. The class implements most ( but not all ) Toolbox calls pertinent for
  6. the
  7. region.
  8.  
  9. Gorazd Krosl, April 1995
  10. *)
  11.  
  12.  
  13. :Class Region super{ Handle }
  14.  
  15.    :m New:
  16.       0 call NewRgn put: self ;m
  17.  
  18.    :m Release:
  19.       get: self call DisposRgn ;m
  20.  
  21.    :m MakeEmpty: get: self call SetEmptyRgn ;m
  22.  
  23.    :m PutBounds: { l t r b -- }
  24.       get: self l t pack r b pack
  25.       call SetRectRgn ;m
  26.  
  27.    :m PutRect: { r -- }
  28.       get: r putbounds: self ;m  \ That's what Toolbox does with
  29.                            \ RectRgn
  30.  
  31.    :m Draw: get: self call FrameRgn ;m
  32.  
  33.    :m Inset:   \ ( dv dh -- )
  34.       pack get: self swap call InsetRgn ;m
  35.  
  36.    :m Offset:  \ ( dv dh -- )
  37.       pack get: self swap call OffsetRgn ;m
  38.  
  39.    :m Paint: get: self call PaintRgn ;m
  40.  
  41.    :m Invert: get: self call InvertRgn ;m
  42.  
  43.    :m Update: get: self call InvalRgn ;m
  44.  
  45.    :m Validate: get: self call ValidRgn ;m
  46.  
  47.    :m Erase: get: self call EraseRgn ;m
  48.  
  49.    :m GetBounds: \ ( - l t r b )
  50.       ptr: self 2+ get: rect ;m
  51.  
  52. (* *************** Operations on two regions *********************** *)
  53. \ Following methods expect Mops region object on the stack. Second
  54. operand
  55. \ and destination are allways this region.
  56.  
  57.  
  58. private
  59.    :m (rparams): { ^rgnobj -- srcA srcB dest }
  60.       get: ^rgnobj get: self dup ;m
  61. public
  62. \ UnionRgn
  63.    :m +: ( ^rgnObj -- )
  64.       (rparams): self call UnionRgn ;m
  65.  
  66. \ Take the difference of two regions.
  67.    :m -: ( ^rgnObj -- )
  68.       (rparams): self call DiffRgn ;m
  69.  
  70. \ Intersection
  71.    :m Sect: ( ^rgnObj -- )
  72.       (rparams): self call SectRgn ;m
  73.  
  74. \ Xor -> Take exclusive OR of two regions
  75.    :m Xor:
  76.       (rparams): self call XorRgn ;m
  77.  
  78. \ EqualRgn
  79.    :m =?:   { ^rgnObj -- b }
  80.       word0 get: ^rgnObj get: self
  81.       call EqualRgn i->l ;m
  82.  
  83. \ CopyRgn
  84.    :m ->:  { ^rgnObj -- }
  85.       (rparams): self drop call CopyRgn ;m
  86.  
  87. (* ******************* Queries *********************** *)
  88. \ Point in region?
  89.    :m Point?:  { ^mopsPt  -- b }
  90.       word0 get: ^mopsPt pack get: self call PtInRgn i->l ;m
  91.  
  92. \ Contains rect
  93.    :m Rect?:   { ^mopsRect -- b }
  94.       word0 addr: ^mopsRect get: self call RectInRgn i->l ;m
  95.  
  96. :m Empty?:  \ ( -- b )
  97.       word0 get: self call EmptyRgn i->l ;m
  98.  
  99. ;class
  100.